iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 23

Day23_Internal Table 與 ABAP SQL、UNION

  • 分享至 

  • xImage
  •  

原文連結:Working with Complex Internal Tables

存取單筆資料

僅需存取單一一筆資料時,可使用SINGLE關鍵字讀取一筆紀錄,結合structure存入該筆資料。

"建立structure"
DATA airport_full TYPE /DMO/I_Airport.

    "關鍵字SINGLE僅回傳第一筆搜尋到的值"
    SELECT SINGLE
      FROM /DMO/I_Airport
    FIELDS AirportID, Name, City, CountryCode
     WHERE City = 'Zurich'
      "存入structure"
      INTO @airport_full.

存取多筆資料

如果想存取所有符合條件的搜尋結果,可以不使用SINGLE關鍵字,並且用Internal Table接收多筆資料,並且INTO後方需加上TABLE關鍵字。

"建立Internal Table"
DATA airport_full TYPE STANDARD TABLE OF /DMO/I_Airport
                       WITH NON-UNIQUE KEY AirportID.

    "關鍵字SINGLE僅回傳第一筆搜尋到的值"
    SELECT 
      FROM /DMO/I_Airport
    FIELDS AirportID, Name, City, CountryCode
     WHERE City = 'London'
      "存入Internal Table"
      INTO TABLE @airport_full.

如上例,假設符合與倫敦相關聯的機場有三個,三個結果皆會依序存入Internal Table。

另外,除了明確指出欲搜尋的欄位,也可以用先前提過的別名、*等指定搜尋條件,用INTO CORRESPONDING FIELDS OF TABLE自動對應欄位順序

另外,也能用DATA()建立行內Internal Table元素,其欄位會根據FIELDS的搜尋條件自動生成。注意,如果INTO後面接的是行內宣告,別名AS是必要的,並且 INTO CORRESPONDING FIELDS OF TABLE不適用行內宣告。

雖然宣告行內Internal Table很方便,但這種方法只能生成標準表格,排序及雜湊表格皆不適用,如果有效能考量且需要大量用鍵值做搜尋,會較不建議使用行內宣告Internal Table。

用UNION組合搜尋結果

UNION是SQL的關鍵字,我們可以用UNION組合多個SELECT的搜尋結果。

如下圖,用第一個SELECT存取左側表格符合CURRENCY_CODE = 'GBP'的航空公司ID與名稱(一筆)。再用第二個SELECT存取右側表格CITY = 'London'的所有機場ID與名稱(三筆)。此時可以用UNION將這些搜尋結果合併成一組共四筆的搜尋結果。

先決條件是兩個結果的欄位名稱及欄位長度需要是相同的,型別則是相同會更好但非必須。

https://ithelp.ithome.com.tw/upload/images/20240919/201138028FafqQcbMe.png

"第一個SELECT"
SELECT FROM /DMO/I_Carrier
    FIELDS 'Airline' AS type, Airline_ID AS ID, Name
     WHERE CurrentyCode = 'GBP'
INTO TABLE @DATA(Names).

UNION ALL

"第二個SELECT"
SELECT FROM /DMO/I_Airport
    FIELDS 'Airport' AS type, Airline_ID AS ID, Name
     WHERE City = 'London'

"合併結果至表格Names"
INTO TABLE @DATA(Names).

上例語法由兩個SELECT組成,各自有 FROMFIELDSWHERE 關鍵字,但只有一個INTO,並用UNION ALL連接。

第一欄的TYPE用來區別該筆資料是航空公司還是機場。兩張表都包含三個欄位,前兩欄有先在FIELDS中進行別名處理使名稱一致,第三欄的Name則是原本兩張表就叫一樣,所以不須另取別名。

下一章要來介紹Business Object(BO)啦~


上一篇
Day22_Internal Table與work area
下一篇
Day24_Business Object 介紹
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言